#include "widget_assist_weather_datebase.h"

//Widget_assist_Weather_Datebase::Widget_assist_Weather_Datebase(QWidget *parent) : QWidget(parent)
//{
//    // 1. 连接数据库
//    // 1.1 连接数据库
//    db = QSqlDatabase::addDatabase("QSQLITE");
//    // 1.2 定位数据库文件路径   文件不能放到资源文件中
//    db.setDatabaseName("My_id_city.db");
//    // 1.3 打开数据库
//    if(!db.open())
//    {
//        qDebug() << "数据库打开失败";
//    }
//    qDebug() << "数据库打开成功";
//    // 2. 创建数据表
//    // 2.1 绑定数据库
//    M_Query = QSqlQuery(db);

//    // 2.2 运行建表语句
//    if(!M_Query.exec( "CREATE TABLE IF NOT EXISTS id_city (id TEXT , city TEXT)" ))
//    {
//        qDebug() << "数据库表创建失败";
//    }
//    qDebug() << "数据库表创建成功";

//    // 初始化 填充数据到数据库
//    city_id_init();
//}

Widget_assist_Weather_Datebase::Widget_assist_Weather_Datebase(QWidget *parent) : QWidget(parent)
{
    // 使用唯一的连接名称
    db = QSqlDatabase::addDatabase("QSQLITE", "connection_weather_city");
    db.setDatabaseName("My_id_city.db");

    if (!db.open()) {
        qDebug() << "数据库打开失败";
    }
    qDebug() << "数据库打开成功";

    M_Query = QSqlQuery(db);

    if (!M_Query.exec("CREATE TABLE IF NOT EXISTS id_city (id TEXT , city TEXT)")) {
        qDebug() << "数据库表创建失败" << M_Query.lastError().text();
    }
    qDebug() << "数据库表创建成功";

    city_id_init();
}

Widget_assist_Weather_Datebase::~Widget_assist_Weather_Datebase()
{
    if (db.isOpen()) {
            db.close(); // 关闭数据库连接
        }
    QSqlDatabase::removeDatabase("connection_weather_city"); // 移除连接
}

void Widget_assist_Weather_Datebase::file_sql_func(QString city, QString id)
{
    this->M_Query.prepare("INSERT INTO id_city (id , city) VALUES (:id , :city)");
    this->M_Query.bindValue(":id", id);
    this->M_Query.bindValue(":city", city);

    if(!this->M_Query.exec())
    {
        qDebug() << "数据库表插入失败" << M_Query.lastError().text();
    }
}

void Widget_assist_Weather_Datebase::city_id_init()
{
    QFile file(":/city_id/city.txt");

        if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            qDebug() << "文件打开失败";
            return;
        }

        QTextStream in(&file);
        in.setCodec("UTF-8"); // 设置编码为 UTF-8

        // 检查数据库中是否有数据
        QSqlQuery checkQuery(db);
        if (!checkQuery.exec("SELECT COUNT(*) FROM id_city"))
        {
            qDebug() << "查询数据库记录数失败" << checkQuery.lastError().text();
            file.close();
            return;
        }

        bool hasData = false;
        if (checkQuery.next())
        {
            int count = checkQuery.value(0).toInt();
            hasData = (count > 0);
        }

        if (hasData)
        {
            qDebug() << "数据库中已有数据，不进行批量插入";
            file.close();
            return;
        }

        qDebug() << "数据库中没有数据，开始批量插入";

        QString number;
        QString city;

        int num = 2504; // 假设要处理的行数为2504

        while (num--)
        {
            QString line = in.readLine(); // 读取一行
            qDebug() << line;

            QStringList parts = line.split(QRegExp("\\s+"));  // 匹配空格或制表符

            if (parts.size() == 2)
            {
                number = parts[0];  // 编号
                city = parts[1];    // 城市

                qDebug() << "编号:" << number;
                qDebug() << "城市:" << city;

                this->file_sql_func(city, number);
            }
        }

        file.close();
}

QString Widget_assist_Weather_Datebase::Find_id_form_city(QString cityName)
{
    // 准备查询语句
   QSqlQuery query(db);
   query.prepare("SELECT id FROM id_city WHERE city = :cityName");
   query.bindValue(":cityName", cityName);

   if (!query.exec())
   {
       qDebug() << "查询失败" << query.lastError().text();
       return "-1";
   }

   if (query.next())
   {
       QString cityId = query.value("id").toString();
       qDebug() << "找到的城市ID是：" << cityId;

       return cityId;

       // 显示查询结果到UI组件上（例如 QLabel）
       //ui->label_result->setText("城市ID: " + cityId);
   }
   else
   {
       qDebug() << "未找到对应的城市ID";
       return "-1";
       //ui->label_result->setText("未找到对应的城市ID");
   }
}
